import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;


public class TestGcc {
	public static void main(String[] args) {
	
		try { 
		
		    String s;   
	        //String[] command = {"CMD", "/C", "dir"};
		    //String[] command = {"CMD", "/C", "dir", "Test.exe"};
	        //String[] command = {"cmd", "/c", "gcc"};
	        //String[] command = {"CMD", "/C", "notepad.exe"};
	        String[] command = {"cmd", "/c", "gcc -c Test.cpp"};
	        ProcessBuilder probuilder = new ProcessBuilder( command );
	        
	        //You can set up your work directory
	        probuilder.directory(new File("d:\\workspace\\Test\\src"));
	        
	        Process process = null;
			process = probuilder.start();
	        
		    // 외부 프로그램 출력 읽기
		    BufferedReader stdOut   = new BufferedReader(new InputStreamReader(process.getInputStream(), "euc-kr"));
		    BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream(), "euc-kr"));
			
	      
	        System.out.printf("Output of running %s is:\n",  Arrays.toString(command));
	
	        
		    // "표준 출력"과 "표준 에러 출력"을 출력
		    while ((s =   stdOut.readLine()) != null) System.out.println(s);
		    while ((s = stdError.readLine()) != null) System.err.println(s);
	        
		    // 외부 프로그램 반환값 출력 (이 부분은 필수가 아님)
		    System.out.println("Exit Code: " + process.exitValue());
		    System.exit(process.exitValue()); // 외부 프로그램의 반환값을, 이 자바 프로그램 자체의 반환값으로 삼기
        
	  } catch (IOException e) { // 에러 처리
	      System.err.println("에러! 외부 명령 실행에 실패했습니다.\n" + e.getMessage());
	      System.exit(-1);
	  }
		
		
	}
}
